package com.lsl.decorator.decorator1;

import com.lsl.decorator.decorator1.component.Person;
import com.lsl.decorator.decorator1.concretedecorator.BigTrouser;
import com.lsl.decorator.decorator1.concretedecorator.Sneakers;
import com.lsl.decorator.decorator1.concretedecorator.TShirts;

/**
 * 动态的给对象添加职责
 * 1.使用装饰者模式可以动态的扩展功能 和继承相比更灵活
 * 2.使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很多,那么势必生成很多子类,增加系统的复杂性
 * 3.装饰模式可以把类的核心职责与装饰功能区分开  可以去除重复的装饰逻辑
 *
 * @author liusl104
 */
public class Test {
    public static void main(String[] args) {
        Person person = new Person("胖虎");
        TShirts shirts = new TShirts(new BigTrouser(new Sneakers(person)));
        System.out.println(shirts.Show());
    }
}
